package com.zh.filetransport.model

import com.google.gson.Gson

const val DATA_KB = 1 shl 10 //1024
const val DATA_MB = 1 shl 20
const val DATA_GB = (1 shl 30).toLong()
val gson = Gson()

// 文件元数据结构
data class FileMetadata(
    val basePath: String,    // 文件名的上级目录（针对传输文件夹，如果传输任务是文件，则BasePath为空）
    val name: String,        // 文件名
    val size: Long,          // 文件size
    var checksum: String = "",    // 文件校验和
    var transferred: Long = 0,   // 断点续传的
    var totalSize: Long = 0,      // 全部文件的size
) {
    // 判断是否为目录
    fun isDir(): Boolean = basePath.isNotBlank()

    // 获取根目录名称，如果传输的是文件而不是目录则返回空
    fun getRootDir(): String {
        if (basePath.isBlank()) {
            return ""
        }
        // 替换路径分隔符为统一的斜杠
        var slashPath = basePath.replace("\\", "/")
        if (slashPath.startsWith("/")) {
            slashPath = slashPath.removePrefix("/")
        }
        // 再分割路径并获取第一个目录
        val parts = slashPath.split("/", limit = 2)
        return parts[0]
    }
}

// 文件任务结构
data class FileTask(
    val id: String,
    val filePath: String,
    val remoteIp: String,
    var totalSize: Long = 0,
    var isDir: Boolean = false
) {
    // 获取文件或目录名
    fun getFileOrDirName(): String {
        if (filePath.isBlank()) {
            return ""
        }
        // 处理路径并获取最后部分
        val cleanedPath = filePath.replace("\\", "/").removeSuffix("/")
        val lastSeparatorIndex = cleanedPath.lastIndexOf('/')
        return if (lastSeparatorIndex != -1) cleanedPath.substring(lastSeparatorIndex + 1) else cleanedPath
    }
}


enum class Mode {
    Console, UI,
}
